package dao

import (
	"errors"
	"kitex-demo/pkg/db"

	"golang.org/x/crypto/bcrypt"
)

// CreateUser 注册用户：密码加密后插入数据库
func CreateUser(username, password string) (int64, error) {
	// 1. 检查用户名是否已存在
	var count int64
	err := db.MysqlDB.Model(&User{}).
		Where("username = ?", username).
		Count(&count).Error
	if err != nil {
		return 0, err
	}
	if count > 0 {
		return 0, errors.New("username already exists")
	}

	// 2. bcrypt 加密密码（cost=10，越高越安全但耗时更长）
	hashedPwd, err := bcrypt.GenerateFromPassword([]byte(password),
		bcrypt.DefaultCost)
	if err != nil {
		return 0, err
	}

	// 3. 插入数据库
	user := &User{
		Username: username,
		Password: string(hashedPwd),
	}
	if err := db.MysqlDB.Create(user).Error; err != nil {
		return 0, err
	}

	return user.ID, nil // 返回新用户 ID
}
